using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Xml.Linq;
using Connection;
namespace Entidades
{
    public abstract class DALRespuesta
    {
        private const string __ErrorAlta = "No se pudo dar el alta (Respuesta), ";
        private const string __ErrorBaja = "No se pudo dar la baja (Respuesta), ";
        private const string __ErrorModificacion = "No se pudo hacer la modificacion (Respuesta), ";
        private const string __ErrorTraerUno = "No se pudo Traer Uno (Respuesta), ";
        private const string __ErrorTraerTodos = "No se pudo Traer Todos (Respuesta), ";
        public static void Alta(Respuesta Respuesta)
        {
            try
            {
                parametrosArray pa = new parametrosArray();
                pa.add("IdPregunta", Respuesta.IdPregunta);
                pa.add("Respuesta", Respuesta.strRespuesta);
                using (DataSet ds = Connection.Connection.Traer("p_Respuesta_Alta", pa))
                {
                    if (ds.Tables.Count > 0)
                    {
                        Respuesta.Id = int.Parse(ds.Tables[0].Rows[0][0].ToString());
                    }
                    else
                    {
                        throw new Exception(__ErrorAlta);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorAlta + ex.Message);
            }
        }
        public static void Baja(int Id)
        {
            try
            {
                parametrosArray pa = new parametrosArray();
                pa.add("Id", Id);
                Connection.Connection.Ejecutar("p_Respuesta_Baja", pa);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorBaja + ex.Message);
            }
        }
        public static void Modificar(Respuesta Respuesta)
        {
            try
            {
                parametrosArray pa = new parametrosArray();
                pa.add("Id", Respuesta.Id);
                pa.add("IdPregunta", Respuesta.IdPregunta);
                pa.add("Respuesta", Respuesta.strRespuesta);
                Connection.Connection.Ejecutar("p_Respuesta_Modificacion", pa);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorModificacion + ex.Message);
            }
        }
        public static void MarcarComoLeido(Respuesta Respuesta)
        {
            try
            {
                parametrosArray pa = new parametrosArray();
                pa.add("Id", Respuesta.Id);
                Connection.Connection.Ejecutar("p_Respuesta_MarcarComoLeido", pa);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorModificacion + ex.Message);
            }
        }

        public static Respuesta traerUno(int Id)
        {
            parametrosArray pa = new parametrosArray();
            pa.add("Id", Id);
            using (DataSet ds = Connection.Connection.Traer("p_Respuesta_TraerUno", pa))
            {
                if (ds.Tables.Count > 0)
                {
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        return llenarEntidad(ds.Tables[0].Rows[0]);
                    }
                }
            }
            throw new Exception(__ErrorTraerUno);
        }


        public static List<Respuesta> TraerTodos()
        {
            using (DataSet ds = Connection.Connection.Traer("p_Respuesta_TraerTodos"))
            {
                if (ds.Tables.Count > 0)
                {
                    List<Respuesta> li = new List<Respuesta>();
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        foreach (DataRow dr in ds.Tables[0].Rows)
                        {
                            li.Add(llenarEntidad(dr));
                        }
                    }
                    return li;
                }
            }
            throw new Exception(__ErrorTraerTodos);
        }
        public static Respuesta getOneByIdPregunta(int IdPregunta)
        {
            parametrosArray pa = new parametrosArray();
            pa.add("IdPregunta", IdPregunta);
            using (DataSet ds = Connection.Connection.Traer("p_Respuesta_getAllByIdPregunta", pa))
            {
                if (ds.Tables.Count > 0)
                {
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        return llenarEntidad(ds.Tables[0].Rows[0]);
                    }
                }
            }
            return new Respuesta();
        }
        private static Respuesta llenarEntidad(DataRow dr)
        {
            Respuesta Respuesta = new Respuesta();
            if (dr.Table.Columns.Contains("Id"))
            {
                if (!object.ReferenceEquals(dr["Id"], DBNull.Value))
                {
                    Respuesta.Id = int.Parse(dr["Id"].ToString());
                }
            }
            if (dr.Table.Columns.Contains("IdPregunta"))
            {
                if (!object.ReferenceEquals(dr["IdPregunta"], DBNull.Value))
                {
                    Respuesta.IdPregunta = int.Parse( dr["IdPregunta"].ToString());
                }
            }
            if (dr.Table.Columns.Contains("Respuesta"))
            {
                if (!object.ReferenceEquals(dr["Respuesta"], DBNull.Value))
                {
                    Respuesta.strRespuesta = dr["Respuesta"].ToString();
                }
            }
            if (dr.Table.Columns.Contains("FechaAlta"))
            {
                if (!object.ReferenceEquals(dr["FechaAlta"], DBNull.Value))
                {
                    Respuesta.FechaAlta = DateTime.Parse(dr["FechaAlta"].ToString());
                }
            }
            if (dr.Table.Columns.Contains("FechaBaja"))
            {
                if (!object.ReferenceEquals(dr["FechaBaja"], DBNull.Value))
                {
                    Respuesta.FechaBaja = DateTime.Parse(dr["FechaBaja"].ToString());
                }
            }
            if (dr.Table.Columns.Contains("idMotivoBajaRespuesta"))
            {
                if (!object.ReferenceEquals(dr["idMotivoBajaRespuesta"], DBNull.Value))
                {
                    Respuesta.idMotivoBajaRespuesta = int.Parse(dr["idMotivoBajaRespuesta"].ToString());
                }
            }
            if (dr.Table.Columns.Contains("IdUsuarioBajaRespuesta"))
            {
                if (!object.ReferenceEquals(dr["IdUsuarioBajaRespuesta"], DBNull.Value))
                {
                    Respuesta.IdUsuarioBajaRespuesta = int.Parse(dr["IdUsuarioBajaRespuesta"].ToString());
                }
            }
            if (dr.Table.Columns.Contains("FechaLeido"))
            {
                if (!object.ReferenceEquals(dr["FechaLeido"], DBNull.Value))
                {
                    Respuesta.FechaLeido = DateTime.Parse(dr["FechaLeido"].ToString());
                }
            }
            return Respuesta;
        }
    }
}
